﻿using cl.innovision.sjm.upload.dao;
using cl.innovision.sjm.upload.to;
using HttpMultipartParser;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Web;
using UploadWCF.cl.innovision.sjm.upload;

namespace UploadWCF
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
    public class ServicioHttp : IServicioHttp
    {

        public System.IO.Stream Upload(System.IO.Stream data)
        {

            int IdSujetoActividad;
            int IdSujeto;
            int IdActividad;
            string Nombre;
            string Descripcion;
            string tipo;
            string IdUsuario;
            var parser = new MultipartFormDataParser(data);

            try
            {
                IdSujetoActividad = int.Parse(parser.Parameters["IdSujetoActividad"].Data);
                IdSujeto = int.Parse(parser.Parameters["IdSujeto"].Data);
                IdActividad = int.Parse(parser.Parameters["IdActividad"].Data);
                IdUsuario = parser.Parameters["IdUsuario"].Data;
                Nombre = parser.Parameters["Nombre"].Data;
                Descripcion = parser.Parameters["Descripcion"].Data;
                tipo = parser.Parameters["tipo"].Data;
            }
            catch (Exception e)
            {
                return new System.IO.MemoryStream(Encoding.UTF8.GetBytes("Error al leer los Parametros: " + e.Message));
            }
        

            try
            {
                var file = parser.Files.First();
                string filename = file.FileName;
                System.IO.Stream archivito = file.Data;
                
                UPLaddFileIN msgIn = new UPLaddFileIN();
                msgIn.IdSujetoActividad = IdSujetoActividad;
                msgIn.IdSujeto = IdSujeto;
                msgIn.IdActividad = IdActividad;
                msgIn.IdUsuario = IdUsuario;
                msgIn.Archivo = Helpers.ToByteArray(archivito);
                msgIn.Nombre = Nombre;
                msgIn.Descripcion = Descripcion;
                msgIn.Tipo = tipo;
                
                
     

                UploadDAO dao = UploadDAO.getInstance();
                dao.uPLaddFile(msgIn);
            }
            catch (Exception e)
            {
                return new System.IO.MemoryStream(Encoding.UTF8.GetBytes("Error procesar el Archivo: " + e.Message));
            }
            return new System.IO.MemoryStream(Encoding.UTF8.GetBytes("Archivo Guardado"));

          
        }

    
        public System.IO.Stream Download(int idFile)
        {

            UPLgetArchivoIN msgIn = new UPLgetArchivoIN();
            msgIn.IdFile = idFile;
            UploadDAO dao = UploadDAO.getInstance();
            UPLgetArchivoOUT archivos =dao.uPLgetArchivo(msgIn);
            byte[] archivo = archivos.UPLgetArchivoCursor0.First<UPLgetArchivoCursor0RS>().Archivo;
            string nombre = archivos.UPLgetArchivoCursor0.First<UPLgetArchivoCursor0RS>().Nombre;
            string tipo = Helpers.ContentType(nombre.Substring(nombre.Length - 4, 4));
            MemoryStream stream = new MemoryStream(archivo);
            WebOperationContext.Current.OutgoingResponse.ContentType = tipo;
            WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=" + nombre;
            return stream;
        }

    }
}
